package practice;
/**
 *题目：
 A国手机号码由且仅由N位十进制数值(0-9)组成。一个手机号码中有至少K位数字相同则被定义为靓号。A国的手机号可以有前导零，比如000123456是一个合法的手机号。小多想花钱将自己的手机号码修改为一个靓号。修改号码中一个数字需要花费的金额为新数字与旧数字之间的差值。比如将1修改为6或6修改为1都需要花5块钱。给出小多现在的手机号码，问将其修改成一个靓号，最少需要多少钱？

 输入描述：

 第一行包含两个整数N，K，分别表示手机号码数字个数以及靓号至少有K个数字相同。

 第二行包含N个字符，每个字符都是一个数字，数字之间没有任何其他空白符。表示小多的手机号码。

 数据范围2<=K<=N<=10000

 输出描述：

 第一行包含一个整数，表示修改成一个靓号，最少需要的金额。

 第二行包含N个数字字符，表示最少花费修改的新手机号。若有多个靓号花费都最少，则输出字典序最小的靓号。
 *
 */

import java.util.Scanner;

public class _选靓号_答案2_ {
    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int N = scanner.nextInt();
//        int K = scanner.nextInt();
//        String s = scanner.next();
//        StringBuffer ans = null;
//        int res = (int) 1e9;
        fun1();
//        System.out.println(res);
//        System.out.println(ans);
    }

    private static void fun1() {
        Scanner sc = new Scanner(System.in);
        int nN = sc.nextInt();
        int kK = sc.nextInt();
        String telNumber = sc.next();
        sc.close(); //        int N=82; //        int K=80; //        String telNumber="2119762952003918195325258677229419698255491250839396799769357665825441616335532825";
        int[] telNumberInts = new int[telNumber.length()];
        int[] telNumberCount = new int[10];
        for (int i = 0; i < telNumber.length(); i++) {
            telNumberInts[i] = telNumber.charAt(i) - 48;
            telNumberCount[telNumberInts[i]]++;
        }
        int[] newTelNumberInts = new int[telNumberInts.length];
//  System.out.println(telNumber.length());
//  System.out.println(telNumberInts.length);
//  System.out.println(newTelNumberInts.length);
        int index = 0;
        for (int i = 0; i < 10; i++) {
            while (telNumberCount[i] > 0) {
                newTelNumberInts[index] = i;
                index++;
                telNumberCount[i]--;
            }
        }
        int min = Integer.MAX_VALUE;
        int changeToNumber = 0;
        boolean oushu = kK % 2 == 0;
        int minIndex = 0;
        for (int i = 0; i <= newTelNumberInts.length - kK; i++) {
            int index0 = i;
            int index1 = i + kK - 1;
            int temp = 0;
            while (index1 > index0) {
                temp += newTelNumberInts[index1] - newTelNumberInts[index0];
                index0++;
                index1--;
            }
            if (temp < min) {
                min = temp;
                minIndex = i;
                if (oushu) {
                    changeToNumber = newTelNumberInts[i + kK / 2 - 1];//中位数选取
                } else {
                    changeToNumber = newTelNumberInts[i + kK / 2];
                }
            }
        }
        boolean[] flag = new boolean[newTelNumberInts.length];
        for (int i = minIndex; i < minIndex + kK; i++) {
            if (newTelNumberInts[i] < changeToNumber) {
                for (int j = telNumberInts.length - 1; j >= 0; j--) {
                    if (!flag[j] && telNumberInts[j] == newTelNumberInts[i]) {
                        telNumberInts[j] = changeToNumber;
                        flag[j] = true;
                        break;
                    }
                }
            } else {
                for (int j = 0; j < telNumberInts.length; j++) {
                    if (!flag[j] && telNumberInts[j] == newTelNumberInts[i]) {
                        telNumberInts[j] = changeToNumber;
                        flag[j] = true;
                        break;
                    }
                }
            }
        }
        System.out.println(min);
        for (int i : telNumberInts) {
            System.out.print(i);
        }
    }
}